<?php

require_once(BaseConfig::LoadClass('log_cotizador.class.php'));

ini_set("max_execution_time",      10);
ini_set("default_socket_timeout" , 10);
ini_set("soap.wsdl_cache_enabled", 0);

function DumpXML($strXML) {
  static $intIndice = 0;
  echo "<div id='xmlNode$intIndice'>$strXML</div>";
  echo "<textarea id='xmlNodeF$intIndice'></textarea>";
  $intIndice++;
}

class SoapClientDebug extends SoapClient {
  public function __doRequest($request, $location, $action, $version, $one_way = null) {
    global $bolGDebug;
    if($bolGDebug) {
      echo "********************* XML MANDADO: *********************<br />";
      DumpXML($request);
      echo "********************* XML MANDADO: *********************<br /><br />";
    }
//    die($request);
    $rsRespuesta = parent::__doRequest($request, $location, $action, $version, $one_way);
    
    if($bolGDebug) {
      echo "********************* XML RECIBIDO: *********************<br />";
      DumpXML($rsRespuesta);
      echo "********************* XML RECIBIDO: *********************<br /><br />";
      die;
    }
    
    return $rsRespuesta;
  }
  
  /**
   * Funcion que regresa a que compañia pertenece el Web Service (AIG, Qualitas, ANA)
   * 
   * @param string $strUrlRequest la URL del Web Service
   */
  static function TipoServicio($strUrlRequest) {
    switch($strUrlRequest) {
      case 'http://sio.qualitas.com.mx/WsEmision/WsEmision.asmx':
      case 'http://qbcenter.qualitas.com.mx/QBCImpresion/Service.asmx':
      case 'http://qbcenter.qualitas.com.mx/wsTarifa/wsTarifa.asmx':
        return 'Qualitas';
        break;
      case 'https://server.anaseguros.com.mx/ananetws/service.asmx':
        return 'Ana';
        break;
      default:
        return 'AIG';
        break;
    }
  }
}

class WSSESoapClient extends SoapClientDebug {
  protected $wsseUser        ;
  protected $wssePassword    ;
  protected $arrParametros   ;
  public    $strFuncion      ;
  protected $strWebServiceURL;
  
  public    $__strXMLActual  ;
  
  public    $strSoapEnv      ;
  public    $strSoapNameSpace;
  
  public    $__last_request         ;
  public    $__last_request_headers ;
  public    $__last_response        ;
  public    $__last_response_headers;

  public function setWSSECredentials($user, $password) {
    $this->wsseUser     = $user    ;
    $this->wssePassword = $password;
    
    $this->strSoapEnv       = "soap";
    global $strGSoapNameSpace;
    if($strGSoapNameSpace) {
      $this->strSoapNameSpace = $strGSoapNameSpace;
    } else {
      $this->strSoapNameSpace = "http://www.chartis.com.mx/";
    }
  }
  
  public function setFunctionParams($arrParametros, $strFuncion, $strWebServiceURL) {
    $this->arrParametros    = $arrParametros   ;
    $this->strFuncion       = $strFuncion      ;
    $this->strWebServiceURL = $strWebServiceURL;
  }
  
  public static function UUID_v3($namespace, $name) {
    // Get hexadecimal components of namespace
    $nhex = str_replace(array('-','{','}'), '', $namespace);

    // Binary Value
    $nstr = '';

    // Convert Namespace UUID to bits
    for($i = 0; $i < strlen($nhex); $i += 2) {
      if(isset($nhex[$i + 1])) {
        $nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
      } else {
        $nstr .= chr(hexdec($nhex[$i] . ""));
      }
    }

    // Calculate hash value
    $hash = md5($nstr . $name);

    return sprintf('%08s-%04s-%04x-%04x-%12s',

      // 32 bits for "time_low"
      substr($hash, 0, 8),

      // 16 bits for "time_mid"
      substr($hash, 8, 4),

      // 16 bits for "time_hi_and_version",
      // four most significant bits holds version number 3
      (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,

      // 16 bits, 8 bits for "clk_seq_hi_res",
      // 8 bits for "clk_seq_low",
      // two most significant bits holds zero and one for variant DCE1.1
      (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,

      // 48 bits for "node"
      substr($hash, 20, 12)
    );
  }

  function CrearXML($strFuncion, $arrOpciones) {
    if($this->__strXMLActual) {
      return $this->__strXMLActual;
    }
    
    $strTimeZone    = date_default_timezone_get();
    date_default_timezone_set("UTC");
    $strTimeBefore  = date("Y-m-d") . "T" . date("H:i") . ":00Z";
    $strTimeNow     = date("Y-m-d") . "T" . date("H:i") . ":01Z";
    $strTimeAfter   = date("Y-m-d") . "T" . date("H:i", mktime(date("H"), date("i") + 5)) . ":00Z";
    $strTimestampID = 'Timestamp-'     . WSSESoapClient::UUID_v3(date  ("Y-m-d"       ), date  ("H:i:00"     ));
    $strMsgUID      = 'urn:uuid:'      . WSSESoapClient::UUID_v3(uniqid('nonce_', true), uniqid('ance_', true));
    $strSecurityID  = 'SecurityToken-' . WSSESoapClient::UUID_v3(uniqid('nonce_', true), uniqid('ance_', true));
    $strNonce       = substr(md5(uniqid('nonce_', true)), 0, 16);
    date_default_timezone_set($strTimeZone);
    $strPasswordDigest = $this->wssePassword;
    
    global $bolImprimirConEstilo;
    if($bolImprimirConEstilo) {
      $strSP = "  ";
      $strNL = "\n";
    } else {
      $strSP = "";
      $strNL = "";
    }
    
    $strSoapEnv = $this->strSoapEnv;
    
    $strRes  = '';
    $strRes .= '<?xml version="1.0" encoding="utf-8"?>' . $strNL;
    $strRes .= '<' . $strSoapEnv . ':Envelope xmlns:' . $strSoapEnv . '="http://schemas.xmlsoap.org/soap/envelope/" targetNamespace="http://tempuri.org/" xmlns:tem="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">' . $strNL;
    $strRes .= $strSP . '<' . $strSoapEnv . ':Header>' . $strNL;
    $strRes .= $strSP . $strSP . '<wsa:Action>http://www.chartis.com.mx/' . $strFuncion . '</wsa:Action>' . $strNL;
    $strRes .= $strSP . $strSP . '<wsa:MessageID>' . $strMsgUID . '</wsa:MessageID>' . $strNL;
    $strRes .= $strSP . $strSP . '<wsa:ReplyTo>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . '<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>' . $strNL;
    $strRes .= $strSP . $strSP . '</wsa:ReplyTo>' . $strNL;
    $strRes .= $strSP . $strSP . '<wsa:To>' . $this->strWebServiceURL . '</wsa:To>' . $strNL;
    $strRes .= $strSP . $strSP . '<wsse:Security ' . $strSoapEnv . ':mustUnderstand="1">' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . '<wsu:Timestamp wsu:Id="' . $strTimestampID . '">' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . $strSP . '<wsu:Created>' . $strTimeNow   . '</wsu:Created>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . $strSP . '<wsu:Expires>' . $strTimeAfter . '</wsu:Expires>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . '</wsu:Timestamp>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . '<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="' . $strSecurityID . '">' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . $strSP . '<wsse:Username>' . $this->wsseUser . '</wsse:Username>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . $strSP . '<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">' . $strPasswordDigest . '</wsse:Password>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . $strSP . '<wsse:Nonce>' . $strNonce . '</wsse:Nonce>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . $strSP . '<wsu:Created>' . $strTimeBefore . '</wsu:Created>' . $strNL;
    $strRes .= $strSP . $strSP . $strSP . '</wsse:UsernameToken>' . $strNL;
    $strRes .= $strSP . $strSP . '</wsse:Security>' . $strNL;
    $strRes .= $strSP . '</' . $strSoapEnv . ':Header>' . $strNL;
    $strRes .= $strSP . '<' . $strSoapEnv . ':Body>' . $strNL;
    $strRes .= $strSP . $strSP . '<' . $strFuncion . ' xmlns="' . $this->strSoapNameSpace . '">' . $strNL;
    
    foreach($arrOpciones as $strLlave => $strVariable) {
      if(is_array($strVariable)) {
        $strRes .= $strSP . $strSP . $strSP . "<$strLlave>" . $strNL;
        foreach($strVariable as $strN2 => $strV2) {
          $strRes .= $strSP . $strSP . $strSP . $strSP . "<$strN2>$strV2</$strN2>" . $strNL;
        }
        $strRes .= $strSP . $strSP . $strSP . "</$strLlave>" . $strNL;
      } else {
        $strRes .= $strSP . $strSP . $strSP . "<$strLlave>$strVariable</$strLlave>" . $strNL;
      }
    }
    
    $strRes .= $strSP . $strSP . '</' . $strFuncion . '>' . $strNL;
    $strRes .= $strSP . '</' . $strSoapEnv . ':Body>' . $strNL;
    $strRes .= '</' . $strSoapEnv . ':Envelope>' . $strNL;
    if($bolImprimirConEstilo) {
      die($strRes);
    }
    
//    die($strRes);
    
    return $strRes;
  }
  
  public function __doRequest($request, $location, $action, $version, $one_way = null) {
    if (!$this->wsseUser or !$this->wssePassword) {
      return parent::__doRequest($request, $location, $action, $version, $one_way);
    }
    
    $request = $this->CrearXML($this->strFuncion, $this->arrParametros);

    return parent::__doRequest($request, $location, $action, $version, $one_way);
  }

}

class CotizadorSOAP {
  /**
   * Codigo postal. Padding de 5 posiciones con 0.
   * 
   * @var int
   */
  var $intCodigoPostal;
  
  /**
   * Clave SISA (AIG) que identifica la marca, modelo y rango de años valido 
   * para un auto.
   * 
   * Nota: La clave SISA es el identificador único de AIG para la combinación 
   * de marca y modelo. A continuación se indican dos métodos de obtener este 
   * dato a partir de la clave AMIS (Asociación Mexicana de Instituciones de 
   * Seguros o a partir del catálogo de Marca y Modelo de AIG por medio del 
   * WebService para Catálogos).
   * 
   * 1) Obtener clave Sisa a partir de clave Amis.  Se hará la llamada al método 
   *    ObtenerCodigoSisa del WebService de Catálogos que se puede encontrar en 
   *    la siguiente dirección (Pruebas-UAT):
   * 
   * $strGSAIGCatalogos
   * 
   * Se retornará el (los) códigos de clave Sisa encontrados para la clave Amis 
   * indicada.
   * 
   * 2) Obtener clave Sisa a partir de clave de Marca y Línea de AIG.  Para 
   * obtener el catálogo de marcas de AIG, se hará la llamada al método 
   * ObtenerCatalogoMarcas del WebService de Catálogos utilizando el código 
   * unificado 1.  Para obtener el catálogo de líneas de AIG, se hará la 
   * llamada al método ObtenerAniosModeloAct1 utilizando la clave de Marca 
   * obtenida y el año del modelo a consultar. Finalmente, los datos obtenidos 
   * de la marca y modelo se enviarán al método ObtenerSisaModelo para obtener 
   * la clave SISA.
   * 
   * @var int
   */
  var $intSISA        ;
  
  /**
   * Campo que corresponde al año del vehiculo a cotizar
   * @var int
   */
  var $intModelo      ;
  
  /**
   * Monto del porcentaje para deducible de Robo Total. Estos son validados 
   * contra los montos de deducibles configurados al momento de realizar el 
   * registro del agente.
   * 
   * Ejemplo: 10 (10% de deducible para Robo Total)
   * 
   * @var float
   */
  var $fltDeducibleRT ;
  
  /**
   * Monto del porcentaje para deducible de Daños Materiales. Estos son 
   * validados contra los montos de deducibles configurados al momento de 
   * realizar el registro del agente
   * 
   * @var float
   */
  var $fltDeducibleDM ;
  
  /**
   * Campo numérico que contiene el monto del la cobertura a contratar por 
   * concepto de cobertura de Responsabilidad Civil. Estos datos son validados 
   * contra los montos de cobertura configurados al momento de realizar el 
   * registro del agente. 
   * 
   * Ejemplo, cobertura RC 2000000($2,000,000.00 de cobertura para Resp. Civil).
   * 
   * @var float
   */
  var $fltCoberturaRC ;
  
  /**
   * Campo numérico que contiene el monto del la cobertura a contratar por 
   * concepto de cobertura de Gastos Medicos por Ocupante. Estos datos son 
   * validados contra los montos de cobertura configurados al momento de 
   * realizar el registro del agente. 
   * 
   * @var float
   */
  var $fltCoberturaGM ;
  
  /**
   * Es un campo numérico que indica el tipo de paquete a cotizar. Los paquetes 
   * disponibles son: 
   * 
   * 1.- Amplia, 
   * 2.- Limitada, 
   * 3.- Responsabilidad Civil (Básica) y 
   * 4.- Gold.  
   * 
   * Dependiendo del parámetro enviado en esta opción, se validará el tipo de 
   * deducibles a enviar de forma obligatoria.
   * 
   * @var int
   */
  var $intTipoPaquete ;
  
  /**
   * Es un campo numérico que indica el sexo del asegurado a cotizar. Los 
   * valores disponibles son: 
   * 
   * 1.- Femenino, 
   * 2.- Masculino y 
   * 3.- No Proporcionado.
   * 
   * @var int
   */
  var $intSexo        ;
  
  /**
   * Es un campo numérico que indica la edad del asegurado a cotizar. El valor 
   * enviado se compara contra los valores mínimos y máximos de edad permitidos 
   * para determinado agente.
   * 
   * @var int
   */
  var $intEdad        ;
  
  /**
   * Son campos de tipo "string" en los cuales se envía en texto plano los datos 
   * correspondientes al agente. Estos campos son necesarios para realizar la 
   * autenticación del usuario y para obtener las reglas de negocio configuradas 
   * de forma individual para cada agente.
   * 
   * @var string
   */
  var $strUsername    ;
  
  /**
   * Son campos de tipo "string" en los cuales se envía en texto plano los datos 
   * correspondientes al agente. Estos campos son necesarios para realizar la 
   * autenticación del usuario y para obtener las reglas de negocio configuradas 
   * de forma individual para cada agente.
   * 
   * @var string
   */
  var $strPassword    ;
  
  /**
   * Contienen los datos de forma y conducto de pago a cotizar. Los datos de 
   * conducto de pago configurados actualmente son 
   * 
   * 1.- Efectivo y 
   * 2.- Tarjeta 
   * 
   * y las formas de pago disponibles para efectivo son 
   * 
   * 1.- Contado, 
   * 2.- Semestral y las disponibles para Tarjeta son  
   * 
   * 1.- Contado, 
   * 2.- Semestral, 
   * 4.- Trimestral y 
   * 6.- Mensual. 
   * 
   * Las formas de pago son validadas contra el conducto de pago 
   * correspondiente.
   * 
   * @var int
   */
  var $intFormaPago   ;
  
  /**
   * Contienen los datos de forma y conducto de pago a cotizar. Los datos de 
   * conducto de pago configurados actualmente son 
   * 
   * 1.- Efectivo y 
   * 2.- Tarjeta 
   * 
   * y las formas de pago disponibles para efectivo son 
   * 
   * 1.- Contado, 
   * 2.- Semestral y las disponibles para Tarjeta son  
   * 
   * 1.- Contado, 
   * 2.- Semestral, 
   * 4.- Trimestral y 
   * 6.- Mensual. 
   * 
   * Las formas de pago son validadas contra el conducto de pago 
   * correspondiente.
   * 
   * @var int
   */
  var $intConductoPago;
  
  /**
   * Es un campo de tipo decimal que contiene el monto de descuento que se 
   * aplicará a la cotización solicitada. Este descuento depende de las reglas 
   * de negocio configuradas para el agente. Las reglas a aplicar y los posibles 
   * valores que recibirá el parámetro son los siguientes:
   * 
   * Se recibirá un parámetro de tipo numérico como Descuento. Se podrán usar 
   * dos dígitos decimales.
   * 
   * Se aplicarán las siguientes validaciones:
   * 
   * #  Se obtendrá el conjunto de reglas de negocio registradas en el sistema 
   *    para el agente cuyo username y password se proporcione al realizar el 
   *    llamado al servicio Web.
   * 
   * #  Si el parámetro ExcepciónZona (Configuración especial para agentes) de 
   *    las reglas de negocio es Verdadero para el agente consultado, se 
   *    aplicarán los descuentos configurados por zona para el agente o en caso 
   *    de no existir el detalle para estos descuentos el descuento se enviará 
   *    como 0.
   * 
   * #  Si el parámetro ExcepciónZona (Configuración especial para agentes) de 
   *    las reglas de negocio se encuentra configurado como Falso para el agente 
   *    consultado y el parámetro sn_DescuentoFijo es Verdadero, se enviará el 
   *    valor configurado en el campo DescuentoFijo.
   * 
   * #  Si el parámetro ExcepciónZona se encuentra configurado como Falso para 
   *    el agente consultado y el parámetro sn_DescuentoFijo es Falso, se 
   *    aceptará un valor variable como descuento y se validará que este valor 
   *    sea mayor o igual a 0 y menor o igual al valor configurado en el campo 
   *    Desc_Max de las reglas de negocio del agente.
   * 
   * Al realizar el envío del parámetro para descuento variable, si las reglas 
   * de negocio del agente permiten la aplicación del descuento se regresarán 
   * los montos para primas, impuestos, recargos, etc., con el descuento 
   * aplicado. En caso de que el descuento variable exceda el rango permitido se 
   * enviará un error indicando esta situación y en caso de que se trate de 
   * descuento fijo, no se tomará en cuenta el parámetro descuento sino que se 
   * aplicará el descuento fijo configurado para el agente. Si no se utilizará 
   * el valor de descuento variable puede enviarse un 0 de forma predeterminada.
   * 
   * @var float
   */
  var $fltDescuento   ;
  
  
  /**
   * Indice del ultimo log guardado
   * 
   * @var int
   */
  var $__intLastIdLog;
  
  var $__uriMetodoConsulta;
  
  /**
   * @var WSSESoapClient
   */
  var $__oResCliente  ;
  
  var $__strXMLActual ;
  
  function CotizadorSOAP() {
    global $strGSAIGCotizacion, $strGSAIGUser, $strGSAIGPass;
    $this->__uriMetodoConsulta  = $strGSAIGCotizacion;
    $this->__strFuncionConsulta = "GenerarCotizacion";
    
    $this->strUsername = $strGSAIGUser;
    $this->strPassword = $strGSAIGPass;
  }
  
  function ObtenerResultadoFuncionWebService($strFuncion, $arrParametros = "", $bolHaciendoCotizacion = false) {
    if($arrParametros === "") {
      $arrParametros = array();
    }
    
    $oConfig = new Config();
    if($oConfig->Get('cotizacion_temp', '0') == "1") {
      if($bolHaciendoCotizacion) {
        global $strGPath;
        error_reporting(0);
        $this->__oResCliente->__last_response = file_get_contents($strGPath . "/scripts/ejemplo_respuesta.xml");
        error_reporting(E_ALL);
        return $this->__oResCliente;
      }
    }
    
    $strEstatusLlamada = "EXITO";
    Variables::SmallTimeLap(true);
    try {
      $ini = ini_set("soap.wsdl_cache_enabled","0");
      $ina = ini_set("default_socket_timeout","6000");
      $arrHeaders["trace"       ] = 1;
      $arrHeaders["soap_version"] = SOAP_1_1;
      
      $this->__oResCliente = new WSSESoapClient($this->__uriMetodoConsulta . "?WSDL", $arrHeaders);
      $this->__oResCliente->setWSSECredentials ($this->strUsername, $this->strPassword);
      $this->__oResCliente->setFunctionParams  ($arrParametros, $strFuncion, $this->__uriMetodoConsulta);
      
      if($this->__strXMLActual) {
        $this->__oResCliente->__strXMLActual = $this->__strXMLActual;
      }
      
      eval('$rsResult = $this->__oResCliente->' . $strFuncion . '($arrParametros);');
    } catch (SoapFault $soapFault) {
      $strLastRequest  = $this->__oResCliente->__last_request ;
      $strLastResponse = $this->__oResCliente->__last_response;
      
/*
      echo "SoapFault:";
      prent_r($soapFault, false);
      echo "rsResult:";
      prent_r($rsResult, false);
      echo "this:";
      prent_r($this, false);
//    */
      
      $this->__oResCliente->__last_request   = "";
      $this->__oResCliente->__last_request  .= "Funcion: $strFuncion<br />\n<br />\n";
      $this->__oResCliente->__last_request  .= "Parametros: <pre>" . print_r($arrParametros, true) . "</pre>\n<br />\n";
      $this->__oResCliente->__last_request  .= "Request: $strLastRequest";
      
      $this->__oResCliente->__last_response  = "Mensaje: " . $soapFault->faultstring . "<br />\n<br />\n";
//      $this->__oResCliente->__last_response .= "Contenido: " . $soapFault->__toString() . "<br />\n<br />\n";
//      $this->__oResCliente->__last_response .= "Response: $strLastResponse";
      
      $strEstatusLlamada = "FRACASO";
    }
    
    if($bolHaciendoCotizacion) {
      $this->__intLastIdLog = LogCotizador::AgregarLogCotizador ($strFuncion, $strEstatusLlamada, $this->__oResCliente->__last_request, $this->__oResCliente->__last_response, $this->__oResCliente->__last_request_headers, $this->__oResCliente->__last_response_headers, Variables::SmallTimeLap());
    } else {
      $this->__intLastIdLog = LogCotizador::AgregarLogWebService($strFuncion, $strEstatusLlamada, $this->__oResCliente->__last_request, $this->__oResCliente->__last_response, $this->__oResCliente->__last_request_headers, $this->__oResCliente->__last_response_headers, Variables::SmallTimeLap());
    }
    return $this->__oResCliente;
  }
  
  function ObtenerArregloRespuesta($bolEsCotizacion = false) {
    if($bolEsCotizacion) {
      $arrRes = $this->__Parse_GenerarCotizacion();
    } else {
      eval('$arrRes = $this->__Parse_' . $this->__oResCliente->strFuncion . '();');
    }
    return $arrRes;
  }
  
  function HacerCotizacion() {
    $arrParametros["codigoPostal"] = (string) sprintf("%05d", $this->intCodigoPostal);
    $arrParametros["SISA"        ] = (int)    $this->intSISA        ;
    $arrParametros["modelo"      ] = (int)    $this->intModelo      ;
    $arrParametros["deducibleRT" ] = (float)  $this->fltDeducibleRT ;
    $arrParametros["deducibleDM" ] = (float)  $this->fltDeducibleDM ;
    $arrParametros["coberturaRC" ] = (float)  $this->fltCoberturaRC ;
    $arrParametros["coberturaGM" ] = (float)  $this->fltCoberturaGM ;
    $arrParametros["tipoPaquete" ] = (int)    $this->intTipoPaquete ;
    $arrParametros["sexo"        ] = (int)    $this->intSexo        ;
    $arrParametros["edad"        ] = (int)    $this->intEdad        ;
    $arrParametros["username"    ] = (string) $this->strUsername    ;
    $arrParametros["password"    ] = (string) $this->strPassword    ;
    $arrParametros["formaPago"   ] = (int)    $this->intFormaPago   ;
    $arrParametros["conductoPago"] = (int)    $this->intConductoPago;
    $arrParametros["descuento"   ] = (float)  $this->fltDescuento   ;
    
    $objClient = $this->ObtenerResultadoFuncionWebService("GenerarCotizacion", $arrParametros, true);
  }
  
  function LlenarDesdePost() {
    $this->intCodigoPostal = sprintf("%05d", $_POST["rep"]["codigoPostal"]);
    $this->intSISA         = $_POST["rep"]["SISA"        ];
    $this->intModelo       = $_POST["rep"]["modelo"      ];
    $this->fltDeducibleRT  = $_POST["rep"]["deducibleRT" ];
    $this->fltDeducibleDM  = $_POST["rep"]["deducibleDM" ];
    $this->fltCoberturaRC  = $_POST["rep"]["coberturaRC" ];
    $this->fltCoberturaGM  = $_POST["rep"]["coberturaGM" ];
    $this->intTipoPaquete  = $_POST["rep"]["tipoPaquete" ];
    $this->intSexo         = $_POST["rep"]["sexo"        ];
    $this->intEdad         = $_POST["rep"]["edad"        ];
//    $this->strUsername     = $_POST["rep"]["username"    ];
//    $this->strPassword     = $_POST["rep"]["password"    ];
    $this->intFormaPago    = $_POST["rep"]["formaPago"   ];
    $this->intConductoPago = $_POST["rep"]["conductoPago"];
    $this->fltDescuento    = $_POST["rep"]["descuento"   ];
  }
}

?>
